from django.shortcuts import render

# Create your views here.
from rest_framework.response import Response
from rest_framework.views import APIView
from rest_framework.permissions import IsAuthenticated
from django_redis import get_redis_connection
from .serializers import CartSKUSerializer, PlaceOrderSerialzier, OrderCommitSerializer

from goods.models import SKU


class PlaceOrderView(APIView):
    """
    1.必须是登陆用户才能访问订单页面
    2.参数有收货地址,支付方式,商品信息,数量,运费
    get 方法
    3.订单页面的商品信息,只能是redis里面的数据,我们需要通过sku_id 查询redis里面的数据
    4.根据商品id,查询商品详细信息,通过序列化器进行序列化,将数据转换为json

    """
    # 必须是登陆用户
    permission_classes = [IsAuthenticated]


    def get(self,request):

        # 已经做了认证,肯定有用户
        user = request.user

        # 链接redis
        redis_conn = get_redis_connection('cart')

        # 查询
        # cart = {sku_id:count}
        redis_cart = redis_conn.hgetall('cart_%s'%user.id)

        # 这里面包含了选中和非选中的信息
        redis_selected_ids = redis_conn.smembers('cart_selected_%s'%user.id)

        cart = {}

        # 这是一个id列表,在里面的都是选中的商品信息
        for sku_id in redis_selected_ids:
            cart[int(sku_id)] = redis_cart[sku_id]


        # 根据商品的id,来查询模型

        ids = cart.keys()

        skus = SKU.objects.filter(pk__in=ids)

        # 选中的商品信息没有数量信息需要手动添加
        for sku in skus:
            sku.count = cart[sku.id]

        from decimal import Decimal
        freight = Decimal('10.00')

        serializer = PlaceOrderSerialzier(
            {'freight':freight,
             'skus':skus})


        return Response(serializer.data)


        # serializer = CartSKUSerializer(skus,many=True)
        #
        # return Response(serializer.data)


from rest_framework.generics import CreateAPIView
class OrderView(CreateAPIView):
    """
    1.必须是登陆用户才能访问此接口(前端通过在请求头中传递token来获取用户信息)
    2.要求前端提交的信息:address,pay_method,user
    3.对数据进行校验
    4.数据入库

    """
    permission_classes = [IsAuthenticated]

    serializer_class = OrderCommitSerializer























